package sv.com.renacempleo.dao.red;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import sv.com.renacempleo.dao.BaseDaoImpl;
import sv.com.renacempleo.dto.red.RedEmpresasContactos;
import sv.com.renacempleo.exception.WebException;

public class RedEmpresasContactosDaoImpl extends BaseDaoImpl implements RedEmpresasContactosDao{

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllAsArray() throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(RedEmpresasContactos.class);
		criteria.createAlias("redEmpresas", "redEmpresas");
		criteria.createAlias("redEmpresaSucursal", "redEmpresaSucursal");
		criteria.setProjection(Projections.projectionList().
			add(Projections.property("redEmpresaContactoId")).
			add(Projections.property("redEmpresas.redEmpresaFolio")).
			add(Projections.property("redEmpresaContactoNombre")).
			add(Projections.property("redEmpresaContactoApellidos")).
			add(Projections.property("redEmpresaContactoPuesto")).
			add(Projections.property("redEmpresaContactoTelefono")).
			add(Projections.property("redEmpresaContactoCelular")).
			add(Projections.property("redEmpresaContactoEmail")).
			add(Projections.property("redEmpresaSucursal.redEmpresaSucursalId"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllByEmpresa(Long redEmpresaFolio)
			throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(RedEmpresasContactos.class);
		criteria.createAlias("redEmpresas", "redEmpresas");
		criteria.createAlias("redEmpresaSucursal", "redEmpresaSucursal");
		criteria.add(Restrictions.eq("redEmpresas.redEmpresaFolio", redEmpresaFolio));
		criteria.setProjection(Projections.projectionList().
			add(Projections.property("redEmpresaContactoId")).
			add(Projections.property("redEmpresas.redEmpresaFolio")).
			add(Projections.property("redEmpresaContactoNombre")).
			add(Projections.property("redEmpresaContactoApellidos")).
			add(Projections.property("redEmpresaContactoPuesto")).
			add(Projections.property("redEmpresaContactoTelefono")).
			add(Projections.property("redEmpresaContactoCelular")).
			add(Projections.property("redEmpresaContactoEmail")).
			add(Projections.property("redEmpresaSucursal.redEmpresaSucursalId")).
			add(Projections.property("redEmpresaSucursal.redEmpresaSucursalNombre"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}

}
